home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / fractal / kaos.lha / complib / symp_rruth_int_one.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-11-18  |  934 b   |  36 lines

  1. /*
  2. ### Symplectic reversible Ruth (Explicit 2nd order) ###
  3. */
  4.  
  5. symp_rruth_int_one(vy,vx,ptime,time_step,dim)
  6. double vy[],vx[],*ptime,time_step;
  7. int dim;
  8. {
  9.     int i;
  10.     double time_step2;
  11.     extern int model;
  12.     extern double *t_v,*t_vf,*param;
  13.     extern int (*f_p)();
  14.  
  15.     time_step2 = time_step/2;
  16.     
  17.     /* phi (t/2) */
  18.     (int) f_p(vy,1,vx,param,*ptime,dim);
  19.     for(i=0;i<dim;i += 2) vy[i] = vx[i] + time_step2 * vy[i];
  20.     (int) f_p(t_vf,2,vy,param,*ptime,dim);
  21.     for(i=1;i<dim;i += 2) vy[i] = vx[i] + time_step2 * t_vf[i];
  22.     /* R phi (t/2) */
  23.     for(i=0;i<dim;i += 2) t_v[i] = vy[i]; 
  24.     for(i=1;i<dim;i += 2) t_v[i] = -vy[i]; 
  25.  
  26.     /* phi-1 (t/2) R phi (t/2) */
  27.     (int) f_p(vy,2,t_v,param,*ptime,dim);
  28.     for(i=1;i<dim;i += 2) vy[i] = t_v[i] - time_step2 * vy[i];
  29.     (int) f_p(t_vf,1,vy,param,*ptime,dim);
  30.     for(i=0;i<dim;i += 2) vy[i] = t_v[i] - time_step2 * t_vf[i];
  31.     /* R phi-1 (t/2) R phi (t/2) */
  32.     for(i=1;i<dim;i += 2) vy[i] = -vy[i]; 
  33.  
  34.     *ptime += time_step;
  35. }
  36.